<?php

declare(strict_types=1);

namespace app\model\common;

use think\Model;

/**
 * 可使用帐号密码登陆
 * 要求有 pswd 字段
 */
trait HasPswdTrait
{

	/**
	 * @var string 密码字段名，模型可设置此字段来决定密码字段名
	 */
	// protected $hasPswdTraitPswdField = 'pswd';

	/**
	 * 设置密码并保存到数据库
	 * @param string $pswd 密码
	 */
	public function savePswd(string $pswd)
	{
		$field = property_exists($this, 'hasPswdTraitPswdField')
			? $this->hasPswdTraitPswdField
			: 'pswd';

		$this->save([$field => password_hash($pswd, PASSWORD_BCRYPT)]);
		return $this;
	}

	/**
	 * 检查密码是否正确
	 * @param string $pswd 密码
	 */
	public function checkPswd(string $pswd)
	{
		$field = property_exists($this, 'hasPswdTraitPswdField')
			? $this->hasPswdTraitPswdField
			: 'pswd';

		return password_verify($pswd, $this[$field]);
	}
}
